package com.itzmn.newcode.offer1;

/**
 * @Author: 张梦楠
 * @Date: 2018/12/19 18:32
 * 简书：https://www.jianshu.com/u/d611be10d1a6
 * 码云：https://gitee.com/zhangqiye
 * @Description: 二叉树的镜像
 *
 *  操作给定的二叉树，将其变换为源二叉树的镜像。
 *
 *  左右节点互换
 *
 *  1.使用队列保存，重新建树
 *  2.递归直接交换左右子树
 *
 */
public class _18_MirrorOfABinaryTree extends Tree{

    public static void main(String[] args) {

        new _18_MirrorOfABinaryTree().test();
    }

    private void test() {

        TreeNode tree = createBinaryTreeWithOnlyOneNull(new int[]{1,2,3,4,5,6});
        SequenceTraversal(tree);
        Mirror(tree);
        SequenceTraversal(tree);

    }

    public void Mirror(TreeNode root) {
        if (root == null){
            return;
        }

        if (root.left != null || root.right != null){
            TreeNode left = root.left;
            root.left = root.right;
            root.right = left;
        }
        if (root.left != null){
            Mirror(root.left);
        }
        if (root.right != null){
            Mirror(root.right);
        }
    }
}
